package com.jhx.common.utils

import android.content.Context
import android.graphics.Bitmap
import android.net.Uri
import android.support.annotation.DrawableRes
import android.text.TextUtils
import android.widget.ImageView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.CenterCrop
import com.bumptech.glide.request.target.SimpleTarget
import com.jhx.common.R
import com.youngfeng.architecture.image.CircleTransform
import com.youngfeng.architecture.image.RoundedCornersTransformation

/**
 * 图片加载器
 * Created by jack on 2017/2/17.
 */
class ImageLoader private constructor() {

    companion object {
        private var instance = ImageLoader()

        fun get(): ImageLoader {
            return instance
        }
    }

    /**
     * 加载本地文件
     *
     * @param context  context
     * @param res       图片地址
     * @param imageView 图片控件
     */
    fun loadCircleImageByRes(context: Context?, @DrawableRes res: Int, imageView: ImageView?) {
        if (context != null && imageView != null) {
            Glide.with(context)
                    .load(res)
                    .dontAnimate()
                    .crossFade()
                    .centerCrop()
                    .bitmapTransform(CircleTransform(context))
                    .error(R.mipmap.img_circle)
                    .placeholder(R.mipmap.img_circle)
                    .into(imageView)
        }
    }

    /**
     * 加载本地文件
     *
     * @param context
     * @param res       图片地址
     * @param imageView 图片控件
     */
    fun loadImageByRes(context: Context?, @DrawableRes res: Int, imageView: ImageView?, radius: Int = 0) {
        if (context != null && imageView != null) {
            loadImageByRes(context, res, R.mipmap.img_default, R.mipmap.img_default, imageView, radius)
        }
    }

    /**
     * 加载本地文件
     *
     * @param context
     * @param res       图片地址
     * @param defRes    默认地址占位图
     * @param errRes    加载错误占位图
     * @param imageView 图片控件
     */
    fun loadImageByRes(context: Context?,
                       @DrawableRes res: Int,
                       @DrawableRes defRes: Int,
                       @DrawableRes errRes: Int,
                       imageView: ImageView?,
                       radius: Int = 0) {
        if (context != null && imageView != null) {
            Glide.with(context)
                    .load(res)
                    .dontAnimate()
                    .crossFade()
                    .centerCrop()
                    .transform(RoundedCornersTransformation(context, radius))
                    .error(errRes)
                    .placeholder(defRes)
                    .into(imageView)
        }
    }

    /**
     * 加载圆角图片
     *
     * @param context   context
     * @param url       图片Url
     * @param imageView 图片控件
     */
    fun loadCircleImageByUrl(context: Context?, url: String?, imageView: ImageView?) {
        if (context != null && !TextUtils.isEmpty(url) && imageView != null) {
            loadCircleImageByUrl(context, url, imageView, R.mipmap.img_circle)
        }
    }

    /**
     * 加载圆角图片
     *
     * @param context   context
     * @param url       图片Url
     * @param imageView 图片控件
     */
    fun loadCircleImageByUrl(context: Context?, url: String?, imageView: ImageView?, default: Int?) {
        if (context != null && !TextUtils.isEmpty(url) && imageView != null) {
            Glide.with(context)
                    .load(url)
                    .dontAnimate()
                    .crossFade()
                    .transform(CenterCrop(context), CircleTransform(context))
                    .error(default!!)
                    .placeholder(default)
                    .into(imageView)
        }
    }

    /**
     * @param context  绑定activity生命周期
     * @param url       图片Url
     * @param imageView 图片控件
     */
    fun loadImageByUrl(context: Context?, url: String?, imageView: ImageView?, radius: Int = 0) {
        if (context != null && !TextUtils.isEmpty(url) && imageView != null) {
            Glide.with(context)
                    .load(url)
                    .dontAnimate()
                    .crossFade()
                    .centerCrop()
                    .transform(CenterCrop(context), RoundedCornersTransformation(context, radius))
                    .error(R.mipmap.img_default)
                    .placeholder(R.mipmap.img_default)
                    .into(imageView)
        }
    }

    /**
     * @param context  绑定activity生命周期
     * @param url       图片Url
     * @param imageView 图片控件
     */
    fun loadImageByUrl(context: Context?, url: String?, imageView: ImageView?, radius: Int = 0, resDefault: Int) {
        if (context != null && !TextUtils.isEmpty(url) && imageView != null) {
            Glide.with(context)
                    .load(url)
                    .dontAnimate()
//                    .crossFade()//如果占位图比例跟要显示的图片不一样会造成显示图片拉伸问题
                    .centerCrop()
                    .transform(CenterCrop(context), RoundedCornersTransformation(context, radius))
                    .error(resDefault)
                    .placeholder(resDefault)
                    //.skipMemoryCache(true)
                    .into(imageView)
        }
    }

    fun loadCircleImageByUri(context: Context?, uri: Uri?, imageView: ImageView?) {
        if (context != null && uri != null && imageView != null) {
            Glide.with(context)
                    .load(uri)
                    .dontAnimate()
                    .crossFade()
                    .transform(CenterCrop(context), CircleTransform(context))
                    .error(R.mipmap.img_circle)
                    .placeholder(R.mipmap.img_circle)
                    .into(imageView)
        }
    }

    fun loadImageByUri(context: Context?, uri: Uri?, imageView: ImageView?, radius: Int = 0) {
        if (context != null && uri != null && imageView != null) {
            Glide.with(context)
                    .load(uri)
                    .dontAnimate()
                    .crossFade()
                    .transform(CenterCrop(context), RoundedCornersTransformation(context, radius))
                    .error(R.mipmap.img_default)
                    .placeholder(R.mipmap.img_default)
                    .into(imageView)
        }
    }

    fun loadImageByUri(context: Context?, uri: String?, l: SimpleTarget<Bitmap>) {
        Glide.with(context)
                .load(uri)
                .asBitmap()
                .into(l)
    }
}
